package cn.Tedu.api;

import java.math.BigDecimal;
import java.util.Scanner;

/*本类用于解决浮点数运算不精确的问题*/
public class TestBigDecimal {
    public static void main(String[] args) {
       // f1();//普通的+-*/四则运算,暴露浮点数运算不精确的问题
        f2();//使用BigDecimal解决浮点数运算不精确的问题
    }

    private static void f2() {
        System.out.println("请您输入要计算的第1个数");
        double a=new Scanner(System.in).nextDouble();
        System.out.println("请您输入要计算的第2个数");
        double b=new Scanner(System.in).nextDouble();
        /*1,最好不要使用double作为构造函数的参数类型,不然还会有不精确的现象,有坑!
        * 2,最好使用重载,参数类型为String的构造函数*/
        BigDecimal bd1 = new BigDecimal(a+"");
        BigDecimal bd2 = new BigDecimal(b+"");

        BigDecimal bd3;

        bd3=bd1.add(bd2);
        System.out.println("加法的结果:"+bd3);

        bd3=bd1.subtract(bd2);
        System.out.println("减法结果"+bd3);

        bd3=bd1.multiply(bd2);
        System.out.println("乘法结果"+bd3);
        /*除法运算,除不尽时抛出异常:ArithmeticException
        * 所以我们应该使用重载的divide(m,n,o)
        * m是要除以哪个对象
        * n是除不尽时保留的位数
        * o是舍入方式,常用的是四舍五入*/
        //bd3=bd1.divide(bd2);
        bd3=bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP);
        System.out.println("除法结果"+bd3);


    }

    private static void f1() {
        System.out.println("请您输入要计算的第1个数");
        double a=new Scanner(System.in).nextDouble();
        System.out.println("请您输入要计算的第2个数");
        double b=new Scanner(System.in).nextDouble();

        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/b);
    }

}
